// 定义一个类
// 对象中主要包含两个部分： 属性和方法
class Person {
    /* 
    对象中主要包含两个部分： 属性和方法
        实例属性：
            直接定义的属性（通过实例对象访问）
                name: string = "路飞"
            通过new对象访问
                const person = new Person();
                person.name

        静态属性：（通过类访问）
            使用static定义的属性
                static gender: string = "男"
            通过类名访问
                Person.gender

        只读属性：
            使用readonly定义的属性
                readonly age: number = 22;

        静态只读属性：
            使用static readonly定义的属性
                static readonly niceName = '海贼王';
        
        实例方法：
            直接定义
                sayHello() {}
            通过new对象访问
                person.sayHello()
        
        静态方法：
            使用static定义
                static eat() {}
            通过类名调用
                Person.eat()
    */
    // 直接定义的属性是实例属性，需要通过new对象去访问，静态属性是通过类名进行访问的
    // 定义实例属性
    name: string = '路飞';
    // 如果在属性前面加上了readOnly ，这个属性就不能修改了,表示只读属性
    readonly age: number = 22;
    // 定义类属性，也叫静态属性
    static gender: string = '男';
    // 静态只读属性
    static readonly niceName = '海贼王';

    // 定义实例方法
    sayHello() {
        console.log("哈哈哈你好！");
    }
    // 定义类方法
    static eat() {
        console.log("吃饭！！！！！")
    }

}

// 创建实例化对象
const person = new Person()
console.log(person)
// person.age = 22;
// console.log(person)
console.log(Person.gender)
// 普通静态属性是可以修改的
// Person.gender = '2';
// console.log(Person.gender)

// 只读的静态属性也不能修改了
// Person.niceName = ''

person.sayHello()
Person.eat()
